/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.sadhar.sipp.perekamansubkelompokanggaran;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.sadhar.sia.common.ClassConnection;

/**
 *
 * @author bloodrunk
 */
public class PerekamanSubKelompokAnggaranDAOImpl implements PerekamanSubKelompokAnggaranDAO {

    public PerekamanSubKelompokAnggaranDAOImpl() {
        ClassConnection.getTransactionProxyFactoryBean().setTarget(this);
    }

    public List<Map> list() {
        return ClassConnection.getJdbc().queryForList(
                "SELECT * FROM ppmk.kelompokBiaya");
    }

    public void insert(PerekamanSubKelompokAnggaran perekamanSubKelompokAnggaran) throws Exception {
        String sql = "INSERT INTO ppmk.subkelompokAnggaranBiaya(kodeKelompokBiaya,kodePosBiaya,isMutlak) VALUES(?,?,?)";
        ClassConnection.getJdbc().update(sql, new Object[]{
                    perekamanSubKelompokAnggaran.getKodeKelompokBiaya(), perekamanSubKelompokAnggaran.getKodePosBiaya(),
                    perekamanSubKelompokAnggaran.getIsMutlak()});
    }

    public void update(PerekamanSubKelompokAnggaran perekamanSubKelompokAnggaran) throws Exception {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    public void delete(PerekamanSubKelompokAnggaran perekamanSubKelompokAnggaran) throws Exception {
        String sql = "DELETE FROM ppmk.subkelompokAnggaranBiaya  WHERE kodeKelompokBiaya=? and kodePosBiaya=?";
        ClassConnection.getJdbc().update(sql,
                new Object[]{Long.valueOf(perekamanSubKelompokAnggaran.getKodeKelompokBiaya()),
                    Long.valueOf(perekamanSubKelompokAnggaran.getKodePosBiaya())});
    }

    public List<Map> listDetail(String tahunKelompok) {
        List<Map> result = ClassConnection.getJdbc().queryForList("select kb.tahunKelompok,skb.kodeKelompokBiaya,kb.kodePosBiaya,kb.kodeJenisBiaya,skb.kodePosBiaya," +
                "  jb.jenisBiaya,skb.isMutlak, skb.kodeSub,pb2.namaPosBiaya as kelompokBiaya,pb1.namaPosBiaya as subKelompokBiaya,kpb.kelompokPengurusBiaya" +
                "  from ppmk.subkelompokAnggaranBiaya skb " +
                "  inner join ppmk.kelompokBiaya kb on (skb.kodeKelompokBiaya = kb.kodePosBiaya) " +
                "  inner join ppmk.jenisBiaya jb on (jb.kodeJenisBiaya = kb.kodeJenisBiaya)" +
                "  inner join ppmk.posBiaya pb1 on (skb.kodePosBiaya = pb1.kodePosBiaya) " +
                "  inner join ppmk.posBiaya pb2 on (kb.kodePosBiaya = pb2.kodePosBiaya) " +
                "  inner join ppmk.kelompokPengurusBiaya kpb on(kpb.kodeKelompokPengurusBiaya=pb2.kodeKelompokPengurusBiaya) where" +
                "  kb.tahunKelompok= ? order by kelompokBiaya,subKelompokBiaya", new Object[]{tahunKelompok});

//        List<Map> result = ClassConnection.getJdbc().queryForList("select kb.tahunKelompok,skb.kodeKelompokBiaya,kb.kodePosBiaya,kb.kodeJenisBiaya,skb.kodePosBiaya," +
//                "  jb.jenisBiaya,skb.isMutlak, skb.kodeSub,pb2.namaPosBiaya as kelompokBiaya,pb1.namaPosBiaya as subKelompokBiaya,kpb.kelompokPengurusBiaya" +
//                "  from ppmk.subkelompokAnggaranBiaya skb " +
//                "  inner join ppmk.kelompokBiaya kb on (kb.kodeKelompokBiaya = skb.kodeKelompokBiaya) " +
//                "  inner join ppmk.jenisBiaya jb on (jb.kodeJenisBiaya = kb.kodeJenisBiaya)" +
//                "  inner join ppmk.posBiaya pb1 on (skb.kodePosBiaya = pb1.kodePosBiaya) " +
//                "  inner join ppmk.posBiaya pb2 on (kb.kodePosBiaya = pb2.kodePosBiaya) " +
//                "  inner join ppmk.kelompokPengurusBiaya kpb on(kpb.kodeKelompokPengurusBiaya=pb2.kodeKelompokPengurusBiaya) " +
//                "  order by kelompokBiaya,subKelompokBiaya");

        List<Map> subKelompok = new ArrayList<Map>();
        String currentNamaKelompokBiaya = "";
        for (Map m : result) {

            if (currentNamaKelompokBiaya.equalsIgnoreCase(m.get("kelompokBiaya").toString())) {
                m.put("kelompokBiaya", "");
                m.put("hidden", currentNamaKelompokBiaya);
            } else {
                currentNamaKelompokBiaya = m.get("kelompokBiaya").toString();
                m.put("hidden", "");
            }
            subKelompok.add(m);
        }
        return result;
    }

    public List<Map> getPosBiaya(int kodePosBiaya, String tahun) {
        List<Map> result = ClassConnection.getJdbc().queryForList("select skb.kodePosBiaya,skb.kodeKelompokBiaya from ppmk.subkelompokAnggaranBiaya skb " +
                " inner join ppmk.posBiaya pb on (skb.kodePosBiaya=pb.kodePosBiaya)" +
                " inner join ppmk.kelompokBiaya kb on(skb.kodeKelompokBiaya=kb.kodePosBiaya)" +
                " where skb.kodeKelompokBiaya = ? and kb.tahunKelompok=? order by namaPosBiaya", new Object[]{kodePosBiaya, tahun});
        return result;
    }

    public List<Map> getPosBiaya(String tahun, int kodePosBiaya, String kodeJenis) {
        List<Map> result = ClassConnection.getJdbc().queryForList("SELECT * FROM ppmk.kelompokBiaya kb," +
                " ppmk.posBiaya pb,ppmk.jenisBiaya jb WHERE " +
                " pb.kodePosBiaya = kb.kodePosBiaya  " +
                " AND jb.kodeJenisBiaya = kb.kodeJenisBiaya " +
                " AND pb.kodePosBiaya!=? " +
                " AND kb.kodeJenisBiaya=?" +
                " AND kb.tahunKelompok = ? ORDER BY pb.namaPosBiaya", new Object[]{kodePosBiaya, kodeJenis, tahun});
        return result;
    }

    public List<Map> listDetail(int kodeKelompokBiaya) {
        List<Map> result = ClassConnection.getJdbc().queryForList("select kb.tahunKelompok,skb.kodeKelompokBiaya,kb.kodePosBiaya,kb.kodeJenisBiaya,skb.kodePosBiaya," +
                "  jb.jenisBiaya,skb.isMutlak, skb.kodeSub,pb2.namaPosBiaya as kelompokBiaya,pb1.namaPosBiaya as subKelompokBiaya,kpb.kelompokPengurusBiaya,pb1.namaPosBiaya" +
                "  from ppmk.subkelompokAnggaranBiaya skb " +
                " inner join ppmk.kelompokBiaya kb on (skb.kodeKelompokBiaya = kb.kodeKelompokBiaya) " +
                " inner join ppmk.jenisBiaya jb on (jb.kodeJenisBiaya=kb.kodeJenisBiaya)" +
                " inner join ppmk.posBiaya pb1 on (skb.kodePosBiaya = pb1.kodePosBiaya)" +
                " inner join ppmk.posBiaya pb2 on (kb.kodePosBiaya = pb2.kodePosBiaya) " +
                " inner join ppmk.kelompokPengurusBiaya kpb on (kpb.kodeKelompokPengurusBiaya=pb2.kodeKelompokPengurusBiaya) " +
                " where skb.kodeKelompokBiaya=?", new Object[]{kodeKelompokBiaya});
        return result;
    }

    public List<Map> listNotInPos(int kodePosBiaya, String tahun) {
        List<Map> result = ClassConnection.getJdbc().queryForList("select * from ppmk.posBiaya ppbb  " +
                "where ppbb.kodePosBiaya " +
                "NOT IN ( select skb.kodePosBiaya as kodePosSub from ppmk.subkelompokAnggaranBiaya skb " +
                "inner join ppmk.kelompokBiaya kb on (skb.kodeKelompokBiaya = kb.kodeKelompokBiaya) " +
                "where kb.kodePosBiaya = ? and kb.tahunKelompok=? order by namaPosBiaya)", new Object[]{kodePosBiaya, tahun});
        return result;
    }

    public Boolean cekData(int kodeKelompok, int kodePos) {
        List<Map> result = ClassConnection.getJdbc().queryForList("select * from ppmk.subkelompokAnggaranBiaya pb   " +
                " where kodeKelompokBiaya=? and kodePosBiaya=? order by kodePosBiaya", new Object[]{kodeKelompok, kodePos});
        Boolean b = false;
        if (result.size() > 0) {
            b = true;
        }
        return b;
    }

    public List<Map> getPosBiaya(String kodeJenisBiaya, String tahun) {
        List<Map> result = ClassConnection.getJdbc().queryForList("SELECT * FROM ppmk.kelompokBiaya kb," +
                " ppmk.posBiaya pb,ppmk.jenisBiaya jb WHERE " +
                " pb.kodePosBiaya = kb.kodePosBiaya  " +
                " AND jb.kodeJenisBiaya = kb.kodeJenisBiaya " +
                " AND kb.kodeJenisBiaya=?" +
                " AND kb.tahunKelompok = ? ORDER BY pb.namaPosBiaya", new Object[]{kodeJenisBiaya, tahun});
        return result;
    }

    @Override
    public List<Map> getPosBiaya(int kodePosBiaya) {
        String sql = "select * from ppmk.posBiaya pb where kodePosBiaya!=" + kodePosBiaya + "";
        return ClassConnection.getJdbc().queryForList(sql);
    }
}
